home *** CD-ROM | disk | FTP | other *** search
- { Updated NUMBERS.SWG on November 2, 1993 }
-
- {
- CORY ALBRECHT
-
- > Can someone please show me how I would convert a base 10 number to
- > base 36? (The one used by RIP)
-
- I presume you mean turning a Variable of Type Byte, Word, Integer, or
- LongInt to a String representation of that number in base 36? Just checking,
- since once I had someone who had two Word Variables who asked me how they
- could change Word1 to hexadecimal For putting it in Word2. The following
- code will turn any number from 0 to 65535 to a String representation of
- that number in any base from 2 to 36.
- }
-
- Unit Conversion;
-
- Interface
-
- Const
- BaseChars : Array [0..35] Of Char = ('0', '1', '2', '3', '4', '5',
- '6', '7', '8', '9', 'A', 'B',
- 'C', 'D', 'E', 'F', 'G', 'H',
- 'I', 'J', 'K', 'L', 'M', 'N',
- 'O', 'P', 'Q', 'R', 'S', 'T',
- 'U', 'V', 'W', 'X', 'Y', 'Z');
-
- { n - number to convert
- b - base to convert to
- s - String to store result in }
-
- Procedure NumToStr(n : Word; b : Byte; Var s);
-
- Implementation
-
- Procedure NumToStr(n : Word; b : Byte; Var s);
- Var
- i,
- res,
- rem : Word;
- begin
- s := '';
- if ((b < 2) or (b > 36)) Then
- Exit;
- res := n;
- i := 1;
- { Get the digits of number n in base b }
- Repeat
- rem = res MOD b;
- res := res div b;
- s[i] := BaseChars[rem - 1];
- Inc(s[0]);
- Until rem = 0;
- { Reverse s since the digits were stored backwards }
- i := 1;
- Repeat
- s[i] := Chr(Ord(s[i]) xor Ord(s[Length(s) - (i - 1)]));
- s[Length(s) - (i - 1)] := Chr(Ord(s[Length(s) - (i - 1)]) xor Ord(s[i]));
- s[i] := Chr(Ord(s[i]) xor Ord(s[Length(s) - (i - 1)]));
- Inc(i);
- Until i >= (Length(s) - (i - 1));
- end;
-
- end.